想法
在JDK-8中,新添加了很多的方法,比如说现在我所说的forEach,该方法是用于集合遍历的,其方式相当于传统的for循环遍历方式,只是与其不同之处就在于采用了lambda表达式,因而在进行循环遍历时代码更加的简介。
但是我们知道,在JDK-8中,除了可以采用forEach来进行集合遍历之外,还可以采用流的形式来对集合进行遍历操作,比如说stream,因而我就突然想到了比较一下三者执行效率到底如何。
设计
下面就是我对于该一想法的实现,由于以上三种方法中含有流,所以说我们操作的对象就选择为实体类,因而我创建了一个实体类Demo,在该实体类中一共存放了两个字段,分别为index索引值字段以及str字符串字段。其中index索引值字段存放的是我们要取用的信息,而str字段则是属于干扰字段,实际上并没有取用。接下来我就是创建100万个Demo,在其中存放相应的信息,然后再使用不同的方法对其进行遍历。最后一步就是比较for、forEach与stream中两两执行时间差异并由此得出他们的执行效率排序。
实现
Demo中的源码:
package com.lyc;
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = {
"index"})
public class Demo {
private int index;
private String str;
}
TraverseComparisonTest中的源码:
package com.lyc;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
public class TraverseComparisonTest {
List<